home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / libs / vopl / glvopl.lha / glvopl / gpp / doargs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-07  |  5.7 KB  |  290 lines

  1.  
  2. #include "vopl.h"
  3. #include "gpp.h"
  4.  
  5. graph    *gp;
  6.  
  7. int    ngraphs = 0,
  8.     do_legend = 0,
  9.     points_only = 0,
  10.     uxscale = 0,
  11.     uyscale = 0,
  12.     uzscale = 0;
  13.  
  14. char    *xlabel,
  15.     *ylabel,
  16.     *zlabel,
  17.     *title,
  18.     fontname[100],            /* name of the font we use */
  19.     device[20];            /* name of the device we use */
  20.  
  21. static    char    *myname;        /* Me */
  22.  
  23. FILE    *infile;            /* current input file */
  24.  
  25. float    wholescale = 1.0;
  26.  
  27. /*
  28.  * usage
  29.  *
  30.  *    Print a usage message
  31.  */
  32. void
  33. usage()
  34. {
  35.     fprintf(stderr, "\nUsage: %s [-X] [-Y] [-x min max] [-y min max] [-S] [-P] [-G] [-l<n>]\n", myname);
  36.     fprintf(stderr, "       [-s s0 sn] [-r<fact>] [-m<n>] [-g<n>] [-p<n>] [-L] [-n]\n");
  37.     fprintf(stderr, "       [-Mx<n>] [-My<n>]\n");
  38.     fprintf(stderr, "       [-d<device>] [-f<fontname>] [- or filename]\n\n");
  39.  
  40.     fprintf(stderr, "Where:\n");
  41.     fprintf(stderr, "-X, -Y specifies logscaling of x and y axes\n");
  42.     fprintf(stderr, "-x, -y specifies optional min and max  of x and y axes\n");
  43.     fprintf(stderr, "-S uses a cardinal spline fit\n");
  44.     fprintf(stderr, "-P uses a power equation fit\n");
  45.     fprintf(stderr, "-G uses a saturated growth fit\n");
  46.     fprintf(stderr, "-l uses a least squares fit of degree <n>\n");
  47.     fprintf(stderr, "-s uses a 'clamped' spline fit with endslopes s0 and sn\n");
  48.     fprintf(stderr, "-r reduces (enlarges) the plot by fact\n");
  49.     fprintf(stderr, "-m places markers at every <n> data points\n");
  50.     fprintf(stderr, "-g places a grid spaced every <n> data points over the plot\n");
  51.     fprintf(stderr, "-p draws markers only at each <n>th point (ie. no lines)\n");
  52.     fprintf(stderr, "-L draws a legend (if any are provided)\n");
  53.     fprintf(stderr, "-n means don't draw any axis anotation\n");
  54.     fprintf(stderr, "-Mx set number of minor tickmarks on X axis (def: 10).\n");
  55.     fprintf(stderr, "-My set number of minor tickmarks on Y axis (def: 10).\n");
  56.     fprintf(stderr, "-d uses VOGLE device <device>\n");
  57.     fprintf(stderr, "-f uses VOGLE font <fontname>\n");
  58.     fprintf(stderr, "- by itself uses standard input for input\n");
  59.     fprintf(stderr, "filename by itself uses filename for input\n");
  60.     
  61.     exit(1);
  62. }
  63.  
  64. /*
  65.  * getone
  66.  *
  67.  *    Returns one floating point number form the argument list.
  68.  */
  69. float
  70. getone(c, arg)
  71.     char c, *arg;
  72. {
  73.     float    a;
  74.  
  75.     if (sscanf(arg, "%f", &a) != 1) {
  76.         fprintf(stderr,"-%c option expects one number\n", c);
  77.         usage();
  78.     }
  79.     return (a);
  80. }
  81.  
  82. /*
  83.  * gettwo
  84.  *
  85.  *    grabs two floating point numbers from the argument list
  86.  */
  87. static void
  88. gettwo(argv, c, a, b)
  89.     char    **argv, c;
  90.     float    *a, *b;
  91. {    
  92.     if (*(argv + 2) != (char *)NULL) {
  93.         if (sscanf(*(++argv), "%f", a) != 1) {
  94.             fprintf(stderr, "-%c option expects two numbers\n", c);
  95.             usage();
  96.         }
  97.         if (sscanf(*(++argv), "%f", b) != 1) {
  98.             fprintf(stderr, "-%c option expects two numbers\n", c);
  99.             usage();
  100.         }
  101.     } else {
  102.         fprintf(stderr, "-%c option expects two numbers\n", c);
  103.         usage();
  104.     }
  105. }
  106.  
  107. /*
  108.  * doargs
  109.  *
  110.  *     Interpret command line args.
  111.  */
  112. void
  113. doargs(argc, argv)
  114.     int    argc;
  115.     char    **argv;
  116. {
  117.     float    a, b;
  118.     char    c;
  119.     int    i, gotinfile = 0;
  120.  
  121.     device[0] = '\0';
  122.     fontname[0] = '\0';
  123.  
  124. #ifdef PC
  125.     if ((myname = rindex(argv[0],'\\')) == NULL)
  126. #else
  127.     if ((myname = rindex(argv[0],'/')) == NULL)
  128. #endif
  129.         myname = argv[0];
  130.     else
  131.         *myname++;
  132.  
  133. #ifdef PC
  134.     *rindex(myname,'.') = '\0';
  135. #endif
  136.  
  137.     while (argc > 1) 
  138.         if (*(*++argv) == '-')
  139.             switch(*(*argv+1)) {
  140.             case 'x':
  141.             case 'y':
  142.             case 'z':
  143.                 c = *(*argv+1);
  144.                 gettwo(argv, c, &a, &b);
  145.                 argc -= 3;
  146.                 argv += 2;
  147.                 range(a, b, c);
  148.                 if (c == 'x')
  149.                     uxscale = 1;
  150.                 else if (c == 'y')
  151.                     uyscale = 1;
  152.                 else
  153.                     uzscale = 1;
  154.                 break;
  155.             case 'X': 
  156.                 scaling(1, 'x');
  157.                 argc--;
  158.                 break;
  159.             case 'Y': 
  160.                 scaling(1, 'y');
  161.                 argc--;
  162.                 break;
  163.             case 's':
  164.                 fit(CUBIC_SPLINE);
  165.                 gettwo(argv, 's', &a, &b);
  166.                 endslopes(a, b);
  167.                 argc -= 3;
  168.                 argv += 2;
  169.                 break;
  170.             case 'r':
  171.                 if (*(*argv + 2)) {
  172.                     a = getone('r', *argv + 2);
  173.                     argc--;
  174.                 } else {
  175.                     a = getone('r', *(++argv));
  176.                     argc -= 2;
  177.                 }
  178.                 /*graphscale(a);*/
  179.                 wholescale = a;
  180.                 break;
  181.             case 'l':
  182.                 fit(LEAST_SQUARE);
  183.                 if (*(*argv + 2) != 0)
  184.                     degree(atoi(*argv + 2));
  185.                 argc--;
  186.                 break;
  187.             case 'S':
  188.                 fit(CUBIC_SPLINE);
  189.                 argc--;
  190.                 break;
  191.             case 'P':
  192.                 fit(POWER_EQN);
  193.                 argc--;
  194.                 break;
  195.             case 'G':
  196.                 fit(SGR_FIT);
  197.                 argc--;
  198.                 break;
  199.             case 'm':
  200.                 if ((i = atoi(*argv + 2)) <= 0)
  201.                     i = 1;
  202.  
  203.                 markerspacing(i);
  204.                 argc--;
  205.                 break;
  206.             case 'p':
  207.                 if ((i = atoi(*argv + 2)) <= 0)
  208.                     i = 1;
  209.  
  210.                 markerspacing(i);
  211.                 fit(NO_LINES);
  212.                 argc--;
  213.                 break;
  214.             case 'n':
  215.                 annotate("", 'x');
  216.                 annotate("", 'y');
  217.                 annotate("", 'z');
  218.                 argc--;
  219.                 break;
  220.             case 'M':
  221.                 if ((i = atoi(*argv + 3)) < 0)
  222.                     i = 0;
  223.  
  224.                 minorticks(i, *(*argv + 2));
  225.                 argc--;
  226.                 break;
  227.             case 'v':
  228.                 /* Print the version of gpp */
  229.                 printf("This is version %s of gpp\n", VERSION);
  230.                 exit(0);
  231.             case 'g':
  232.                 if ((i = atoi(*argv + 2)) <= 0)
  233.                     i = 1;
  234.  
  235.                 gridspacing(i, 'x');
  236.                 gridspacing(i, 'y');
  237.                 gridspacing(i, 'z');
  238.                 argc--;
  239.                 break;
  240.             case 'L':
  241.                 do_legend = 1;
  242.                 argc--;
  243.                 break;
  244.             case 'f' :
  245.                 if (*(*argv+2)) {
  246.                     strcpy(fontname, *argv + 2);
  247.                     argc--;
  248.                 } else {
  249.                     strcpy(fontname, *(++argv));
  250.                     argc -= 2;
  251.                 }
  252.                 break;
  253.             case 'd':
  254.                 if (*(*argv + 2)) {
  255.                     strcpy(device,*argv + 2);
  256.                     argc--;
  257.                 } else {
  258.                     strcpy(device,*(++argv));
  259.                     argc -= 2;
  260.                 }
  261.                 break;
  262.             case 0:            /* single - read stdin */
  263.                 gotinfile = 1;
  264.                 infile = stdin;
  265.                 argc--;
  266.                 break;
  267.             default:
  268.                 fprintf(stderr, "Unknown flag: %s\n",*argv);
  269.                 usage();
  270.                 exit(-1);
  271.             }
  272.         else {       /* the input file */
  273.             if ((infile = fopen(*argv,"r")) == NULL) {
  274.                 fprintf(stderr, "Can't open: %s\n",*argv);
  275.                 usage();
  276.                 exit(-1);
  277.             } else {
  278.                 gotinfile = 1;
  279.                 argc--;
  280.             }
  281.         }
  282.  
  283.     if (!gotinfile) 
  284.         usage();
  285.  
  286.     if (!device[0]) 
  287.         strcpy(device, DEFAULTDEV);
  288. }
  289.  
  290.